package com.twq.patternmatch.basic

/**
 * Created by tangweiqun on 2017/12/8.
 */
object SealedClass {
  def main(args: Array[String]): Unit = {
    //当你在用模式匹配的时候，你肯定需要考虑所有场景的case，有的时候我们可以用default来代替所有没有考虑到的情况
    //但是有的时候这个默认值没有意义，这个时候怎么来保证你能考虑到所有的情况呢？

    //我们让编译器来帮我们考虑，我们可以在case class的父类上加一个sealed的关键字，这个sealed会帮我们做两件事情：
    //1：在我们定义模式匹配的时候，如果没有考虑全场景，编译器会报警告

    //2：被sealed修饰的类，不能被在其他文件中的case class继承

  }

  def describe(e: Expr): String = e match {
    case Number(_) => "a number"
    case Var(_) => "a variable"

  }
}

//case class BinOp2(operator: String,
//                 left: Expr, right: Expr) extends Expr
